home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / msysjour / vol05 / 02 / checker3 / checkers.c < prev    next >
C/C++ Source or Header  |  1990-03-19  |  7KB  |  172 lines

  1. /*------------------------------------------------------------------------
  2.    CHECKERS.C -- OS/2 Presentation Manager Checkers Program, Version 0.30
  3.                  (c) 1990, Charles Petzold
  4.   ------------------------------------------------------------------------*/
  5.  
  6. #define INCL_WIN
  7. #include <os2.h>
  8. #include "checkers.h"
  9.  
  10. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2);
  11. MRESULT EXPENTRY JudgeWndProc  (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2);
  12. MRESULT EXPENTRY BoardWndProc  (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2);
  13. MRESULT EXPENTRY AboutDlgProc  (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2);
  14.  
  15. HAB hab ;
  16.  
  17. int main (void)
  18.      {
  19.      static CHAR  szClientClass[] = "Checkers" ;
  20.      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU  |
  21.                                  FCF_SIZEBORDER    | FCF_MINMAX   |
  22.                                  FCF_SHELLPOSITION | FCF_TASKLIST |
  23.                                  FCF_MENU ;
  24.      HMQ          hmq ;
  25.      HWND         hwndFrame, hwndClient ;
  26.      QMSG         qmsg ;
  27.  
  28.      hab = WinInitialize (0) ;
  29.      hmq = WinCreateMsgQueue (hab, 0) ;
  30.      WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
  31.  
  32.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
  33.                                      &flFrameFlags, szClientClass, NULL,
  34.                                      0L, NULL, ID_RESOURCE, &hwndClient) ;
  35.  
  36.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  37.           WinDispatchMsg (hab, &qmsg) ;
  38.  
  39.      WinDestroyWindow (hwndFrame) ;
  40.      WinDestroyMsgQueue (hmq) ;
  41.      WinTerminate (hab) ;
  42.      return 0 ;
  43.      }
  44.  
  45. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  46.      {
  47.      static CHAR  szJudgeClass[] = "Checkers.Judge",
  48.                   szBoardClass[] = "Checkers.Board" ;
  49.      static HWND  hwndJudge, hwndBoard, hwndMenu ;
  50.      static SHORT sBottom = BLACK ;
  51.  
  52.      switch (msg)
  53.           {
  54.           case WM_CREATE:
  55.                                    // Register Judge class & create window
  56.  
  57.                WinRegisterClass (hab, szJudgeClass, JudgeWndProc,
  58.                                  CS_SIZEREDRAW, 0) ;
  59.  
  60.                hwndJudge = WinCreateWindow (HWND_OBJECT, szJudgeClass, NULL,
  61.                                             0L, 0, 0, 0, 0,
  62.                                             hwnd, HWND_BOTTOM, 1, NULL, NULL) ;
  63.  
  64.                                    // Register Board class & create window
  65.  
  66.                WinRegisterClass (hab, szBoardClass, BoardWndProc,
  67.                                  CS_SIZEREDRAW, 0) ;
  68.  
  69.                hwndBoard = WinCreateWindow (hwnd, szBoardClass, NULL,
  70.                                             WS_VISIBLE, 0, 0, 0, 0,
  71.                                             hwnd, HWND_BOTTOM, 2, NULL, NULL) ;
  72.  
  73.                                    // Inform windows of each other's handles
  74.  
  75.                WinSendMsg (hwndJudge, WM_TELL_JUDGE_BOARD_HANDLE,
  76.                            MPFROMHWND (hwndBoard), NULL) ;
  77.  
  78.                WinSendMsg (hwndBoard, WM_TELL_BOARD_JUDGE_HANDLE,
  79.                            MPFROMHWND (hwndJudge), NULL) ;
  80.  
  81.                                    // Begin a new game
  82.  
  83.                WinSendMsg (hwndJudge, WM_TELL_JUDGE_NEW_GAME,
  84.                            NULL, NULL) ;
  85.  
  86.                                    // Obtain handle of menu window
  87.  
  88.                hwndMenu = WinWindowFromID (
  89.                               WinQueryWindow (hwnd, QW_PARENT, FALSE),
  90.                               FID_MENU) ;
  91.                return 0 ;
  92.  
  93.           case WM_SIZE:
  94.                                    // Resize Board window
  95.  
  96.                WinSetWindowPos (hwndBoard, NULL, 0, 0,
  97.                                 SHORT1FROMMP (mp2), SHORT2FROMMP (mp2),
  98.                                 SWP_MOVE | SWP_SIZE) ;
  99.                return 0 ;
  100.  
  101.           case WM_CHAR:
  102.                                    // Send keystrokes to Board window
  103.  
  104.                return WinSendMsg (hwndBoard, WM_CHAR, mp1, mp2) ;
  105.  
  106.           case WM_COMMAND:
  107.                                    // Process menu commands
  108.  
  109.                switch (COMMANDMSG (&msg)->cmd)
  110.                     {
  111.                     case IDM_NEWGAME:
  112.                          WinSendMsg (hwndJudge, WM_TELL_JUDGE_NEW_GAME,
  113.                                      NULL, NULL) ;
  114.                          return 0 ;
  115.  
  116.                     case IDM_BOTTOM:
  117.                          WinSendMsg (hwndMenu, MM_SETITEMATTR,
  118.                                      MPFROM2SHORT (IDM_BOTTOM, TRUE),
  119.                                      MPFROM2SHORT (MIA_CHECKED,
  120.                                         sBottom ? MIA_CHECKED : 0)) ;
  121.                          sBottom ^= 1 ;
  122.                          WinSendMsg (hwndBoard, WM_TELL_BOARD_NEW_ORIENTATION,
  123.                                      MPFROMSHORT (sBottom), NULL) ;
  124.                          return 0 ;
  125.  
  126.                     case IDM_ABOUT:
  127.                          WinDlgBox (HWND_DESKTOP, hwnd, AboutDlgProc,
  128.                                     NULL, IDD_ABOUT_DLG, NULL) ;
  129.                          return 0 ;
  130.  
  131.                     case IDM_COLOR_BACKGROUND:
  132.                     case IDM_COLOR_BLACK_SQUARE:
  133.                     case IDM_COLOR_WHITE_SQUARE:
  134.                          WinSendMsg (hwndBoard, WM_TELL_BOARD_COLOR_DIALOG,
  135.                                      MPFROMP (&COMMANDMSG (&msg)->cmd),
  136.                                      MPFROMSHORT (FALSE)) ;
  137.                          return 0 ;
  138.  
  139.                     case IDM_COLOR_BLACK_PIECE:
  140.                     case IDM_COLOR_WHITE_PIECE:
  141.                          WinSendMsg (hwndBoard, WM_TELL_BOARD_COLOR_DIALOG,
  142.                                      MPFROMP (&COMMANDMSG (&msg)->cmd),
  143.                                      MPFROMSHORT (TRUE)) ;
  144.                          return 0 ;
  145.                          return 0 ;
  146.  
  147.                     case IDM_COLOR_STANDARD:
  148.                          WinSendMsg (hwndBoard, WM_TELL_BOARD_STANDARD_COLORS,
  149.                                      NULL, NULL) ;
  150.                          return 0 ;
  151.                     }
  152.                break ;
  153.           }
  154.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  155.      }
  156.  
  157. MRESULT EXPENTRY AboutDlgProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  158.      {
  159.      switch (msg)
  160.           {
  161.           case WM_COMMAND:
  162.                switch (COMMANDMSG(&msg)->cmd)
  163.                     {
  164.                     case DID_OK:
  165.                     case DID_CANCEL:
  166.                          WinDismissDlg (hwnd, TRUE) ;
  167.                          return 0 ;
  168.                     }
  169.           }
  170.      return WinDefDlgProc (hwnd, msg, mp1, mp2) ;
  171.      }
  172.